Package-level declarations

Types

Link copied to clipboard
@Serializable
data class AllCoursesResponse(val aplusUrl: String, val courses: List<AllCoursesResponse.Entry>)
Link copied to clipboard
@Serializable
data class ApiErrorEnvelopeV1(val error: ApiErrorV1)
Link copied to clipboard
@Serializable
data class ApiErrorV1(val code: String, val message: String, val requestId: String, val issues: List<ApiIssueV1> = emptyList())
Link copied to clipboard
@Serializable
data class ApiIssueV1(val path: String, val code: String, val message: String)
Link copied to clipboard
data class AssignmentPoints(val points: Int, val maxPoints: Int, val bestSubmissionId: Long?, val submissions: List<SubmissionPoints>)
Link copied to clipboard
@Serializable
data class AssignmentProgress(val id: Long, val name: String, val fileFields: List<ExerciseFileField>, val points: Int, val maxPoints: Int, val bestSubmissionId: Long?, val submissions: List<SubmissionProgress>)
Link copied to clipboard
data class AuthorizedCourseRequest(val entry: CourseEntry, val token: String, val identity: Identity, val role: Role)
Link copied to clipboard
@Serializable
data class ConfiguredGraderView(val userId: Long, val username: String, val fullName: String?, val role: Role, val languages: List<String>, val feedbackTags: List<String>, val gradingTags: List<String>)
Link copied to clipboard
@Serializable
data class CourseAssignment(val id: Long, val name: String, val fileFields: List<ExerciseFileField>)
Link copied to clipboard
@Serializable
data class CourseConfiguration(val schemaVersion: Int = CURRENT_SCHEMA_VERSION, val id: Long, val slug: String, val name: String, val languages: List<String>, val highlightLanguages: List<String>, val courseConfigUrl: String? = null, val templates: CourseTemplateSettings, val ltiLoginUrl: String? = null, val listed: Boolean = true, val tags: List<CourseTag> = emptyList(), val visibleTagSlugs: List<String> = emptyList(), val graders: List<CourseGrader> = emptyList(), val manualGradingExercises: List<Long> = emptyList())
Link copied to clipboard
@Serializable
data class CourseConfigurationCreateBody(val courseId: Long, val copyFromCourseId: Long? = null, val slug: String? = null, val name: String? = null, val languages: List<String>? = null, val highlightLanguages: List<String>, val listed: Boolean? = null, val courseConfigUrl: String? = null, val visibleTagSlugs: List<String>? = null, val graders: List<CourseGrader>? = null, val manualGradingExercises: List<Long>? = null)
Link copied to clipboard
@Serializable
data class CourseConfigurationDiscovery(val id: Long, val name: String, val code: String? = null, val htmlUrl: String? = null, val configured: Boolean)
Link copied to clipboard
@Serializable
data class CourseDraftContext(val tags: List<CourseTag>, val ltiLoginUrl: String?, val templateStatus: TemplateCatalogStatus? = null)
Link copied to clipboard
data class CourseEntry(val configuration: CourseConfiguration, val revision: Long)
Link copied to clipboard
data class CourseExerciseSource(val id: Long, val name: String, val moduleName: String, val maxPoints: Int)
Link copied to clipboard
@Serializable
data class CourseFileResolution(val exerciseId: Long, val submissionId: Long, val assignmentName: String, val assignmentHtmlUrl: String, val points: Int, val maxPoints: Int, val url: String?)
Link copied to clipboard
@Serializable
data class CourseFileUrl(val filename: String, val resolution: CourseFileResolution?)
Link copied to clipboard
@Serializable
data class CourseGrader(val userId: Long, val languages: List<String>, val feedbackTags: List<String> = emptyList(), val gradingTags: List<String> = emptyList())
Link copied to clipboard
@Serializable
data class CourseModule(val name: String, val assignments: List<CourseAssignment>)
Link copied to clipboard
data class CoursePoints(val pointsPerAssignment: Map<Long, AssignmentPoints>, val pointsPerWeek: Map<Long, WeekPoints>)
Link copied to clipboard
@Serializable
data class CourseRefreshJob(val id: String, val courseId: Long, val kind: String, val phase: String, val updatedAtMillis: Long)
Link copied to clipboard

Serves authorization-scoped course data and owns the process-local course caches.

Link copied to clipboard
@Serializable
data class CourseSettingsDocumentV1(val revision: Long, val schemaVersion: Int, val courseId: Long, val slug: String, val name: String, val languages: List<String>, val highlightLanguages: List<String>, val courseConfigUrl: String? = null, val templates: CourseTemplateSettings, val listed: Boolean, val visibleTagSlugs: List<String>, val graders: List<CourseGrader>, val manualGradingExercises: List<Long>, val tags: List<CourseTag>, val ltiLoginUrl: String? = null)
Link copied to clipboard

Owns course discovery, validation, replacement, and cache invalidation.

Link copied to clipboard
@Serializable
data class CourseSettingsUpdateV1(val schemaVersion: Int, val slug: String, val name: String, val languages: List<String>, val highlightLanguages: List<String>, val courseConfigUrl: String? = null, val templates: CourseTemplateSettings, val listed: Boolean, val visibleTagSlugs: List<String>, val graders: List<CourseGrader>, val manualGradingExercises: List<Long>)
Link copied to clipboard
@Serializable
data class CourseSnapshot(val courseId: Long, val lang: String, val courseConfigName: String, val weeks: List<CourseWeek>, val fetchedAtMillis: Long, val freshness: DataFreshness, val refreshing: Boolean, val cacheDisposition: String = "miss")
Link copied to clipboard
interface CourseSource

Supplies course structure and progress data from A+ in Hanami-owned models.

Link copied to clipboard
@Serializable
data class CoursesResponse(val aplusUrl: String, val courses: List<CoursesResponse.Entry>)
Link copied to clipboard
data class CourseStructure(val snapshot: CourseSnapshot, val sourceWeeks: List<CourseWeekSource>, val fileFieldsByExercise: Map<Long, List<ExerciseFileField>>)
Link copied to clipboard
@Serializable
data class CourseTag(val slug: String, val name: String, val description: String, val color: String, val fontWhite: Boolean)
Link copied to clipboard
interface CourseTemplates
Link copied to clipboard
@Serializable
data class CourseTemplateSettings(val automaticExtensions: Boolean, val extensions: List<String>, val excludedPathSegments: List<String>)
Link copied to clipboard
@Serializable
data class CourseWeek(val id: Long, val name: String, val modules: List<CourseModule>)
Link copied to clipboard
data class CourseWeekSource(val name: String, val id: Long, val exercises: List<CourseExerciseSource>)
Link copied to clipboard
@Serializable
enum DataFreshness : Enum<DataFreshness>
Link copied to clipboard
@Serializable
data class DifficultyPoints(val difficulty: String, val points: Int, val maxPoints: Int)
Link copied to clipboard
@Serializable
data class EmailBody(val email: String)
Link copied to clipboard
@Serializable
data class ExerciseFileField(val key: String, val filename: String)
Link copied to clipboard
data class ExternalCourse(val id: Long?, val name: String?, val code: String?, val instanceName: String?, val htmlUrl: String, val endingTime: String, val imageUrl: String?)
Link copied to clipboard
data class ExternalCourseTag(val slug: String, val name: String, val description: String, val color: String, val fontWhite: Boolean)
Link copied to clipboard
@Serializable
data class GraderIdsBody(val userIds: List<Long>)
Link copied to clipboard
Link copied to clipboard
@Serializable
data class ModuleFileLatest(val filename: String, val latestBestSubmissionExerciseId: Long?, val latestBestSubmissionId: Long?)
Link copied to clipboard
@Serializable
data class ModuleWeekUrls(val name: String, val files: List<CourseFileUrl>)
Link copied to clipboard
@Serializable
data class ProgressModule(val name: String, val assignments: List<AssignmentProgress>, val files: List<ModuleFileLatest>)
Link copied to clipboard
@Serializable
data class ProgressWeek(val id: Long, val name: String, val points: Int, val maxPoints: Int, val modules: List<ProgressModule>)
Link copied to clipboard
@Serializable
data class RevisionBody(val revision: Long)
Link copied to clipboard
@Serializable
data class StudentBestSnapshot(val courseId: Long, val lang: String, val studentId: String, val weeks: List<ProgressWeek>, val fetchedAtMillis: Long, val freshness: DataFreshness, val refreshing: Boolean, val cacheDisposition: String = "miss")
Link copied to clipboard
@Serializable
data class StudentPointsSummary(val points: Int, val maxPoints: Int, val difficulties: List<DifficultyPoints>)
Link copied to clipboard
@Serializable
data class StudentsResponse(val students: List<StudentView>, val total: Int, val fetchedAtMillis: Long, val freshness: DataFreshness, val refreshing: Boolean, val cacheDisposition: String = "miss")
Link copied to clipboard
@Serializable
data class StudentView(val id: Long, val username: String?, val fullName: String?, val email: String?, val studentId: String?, val tagSlugs: List<String> = emptyList(), val participantPageUrl: String? = null)
Link copied to clipboard
data class SubmissionPoints(val id: Long, val submittedAt: String, val grade: Int)
Link copied to clipboard
@Serializable
data class SubmissionProgress(val id: Long, val submittedAt: String, val grade: Int)
Link copied to clipboard
Link copied to clipboard
@Serializable
data class TemplateCatalogStatus(val source: String?, val state: TemplateCatalogState, val discoveredModules: Int, val cachedModules: Int, val failedModules: Int, val lastSuccessfulCheckAt: Long?, val errorCode: String?, val effectiveExtensions: List<String>)
Link copied to clipboard
data class TemplateExtractionPolicy(val extensions: Set<String>, val excludedPathSegments: Set<String>)
Link copied to clipboard
Link copied to clipboard
class UnknownCourseExerciseException(val courseId: Long, val exerciseId: Long) : RuntimeException
Link copied to clipboard
class UnknownCourseWeekException(val courseId: Long, val weekId: Long) : RuntimeException
Link copied to clipboard
@Serializable
data class VersionedCourseConfiguration(val revision: Long, val schemaVersion: Int, val id: Long, val slug: String, val name: String, val languages: List<String>, val highlightLanguages: List<String>, val courseConfigUrl: String?, val templates: CourseTemplateSettings, val ltiLoginUrl: String?, val listed: Boolean = true, val tags: List<CourseTag> = emptyList(), val visibleTagSlugs: List<String> = emptyList(), val graders: List<CourseGrader> = emptyList(), val manualGradingExercises: List<Long> = emptyList())
Link copied to clipboard
@Serializable
data class WeekFileUrls(val week: String, val modules: List<ModuleWeekUrls>)
Link copied to clipboard
data class WeekPoints(val points: Int, val maxPoints: Int)

Functions

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard